/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package View;

import controller.FormacaoController;
import exception.DuplicateConstraintException;
import exception.RemoveConstraintException;
import java.io.Serializable;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.inject.Inject;
import javax.inject.Named;
import model.entidades.Formacao;
import org.apache.myfaces.extensions.cdi.core.api.scope.conversation.Conversation;
import org.apache.myfaces.extensions.cdi.core.api.scope.conversation.ConversationScoped;

/**
 *
 * @author helton
 */
@Named
@ConversationScoped
public class FormacaoView implements View, Serializable {

    @Inject
    Conversation conversation;
    @Inject
    FormacaoController controller;
    @Inject
    ProfissionalView profissionalView;
    private Formacao formacao;
    private List<Formacao> formacoes;
    private Map<String, String> optFormacoes = new HashMap<>();

    @Override
    @PostConstruct
    public void init() {
        formacao = new Formacao();
    }

    @Override
    public void closeConversation(ActionEvent event) {
        conversation.close();
    }

    @Override
    public String actionNovo() {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public String actionSalvar() throws DuplicateConstraintException {
        if (validaForm()) {
            formacao.setIdProfis(profissionalView.getProfissional().getId());
            if (formacao.getId() == null) {
                controller.insert(formacao);
                init();
            } else {
                controller.update(formacao);
                init();
            }
            formacoes = null;
            return "formacoes";
        } else {
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(
                    FacesMessage.SEVERITY_ERROR, "Preencha os campos obrigatórios (*)!", ""));
            return "formacoes";
        }
    }

    public String seguinte() {
        conversation.close();
        return "vinculos";
    }

    public String voltar() {
        return "dadosContato";
    }

    @Override
    public String actionListar() {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public void actionRemover() throws RemoveConstraintException {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    public boolean validaForm() {
        if (formacao.getTipo() == null || formacao.getAnoini() == 0
                || formacao.getDescricao() == null || formacao.getInstituicao() == null) {
            return false;
        } else {
            return true;
        }
    }

    public Map<String, String> getOptFormacoes() {
        optFormacoes.put("Graduação", "Graduação");
        optFormacoes.put("Residencia", "Residencia");
        optFormacoes.put("Especialização", "Especialização");
        optFormacoes.put("Subespecialização", "Subespecialização");
        optFormacoes.put("Mestrado", "Mestrado");
        optFormacoes.put("Doutorado", "Doutorado");
        return optFormacoes;
    }

    public void setOptFormacao(Map<String, String> formacao) {
        this.optFormacoes = formacao;
    }

    public Formacao getFormacao() {
        return formacao;
    }

    public void setFormacao(Formacao formacao) {
        this.formacao = formacao;
    }

    public List<Formacao> getFormacoes() {
        if (formacoes == null) {
            formacoes = controller.getAll(profissionalView.getProfissional().getId());
        }
        return formacoes;
    }

    public void setFormacoes(List<Formacao> formacoes) {
        this.formacoes = formacoes;
    }
}
